Monografias.com > Sin categoría
Descargar Imprimir Comentar Ver trabajos relacionados

Manual de user (página 2)




Enviado por milun



Partes: 1, 2

3. Ejercicios de programación

Haga un programa que nos
pregunte el nombre y luego nos salude por nuestro nombre y nos
pregunte como estamos. Que de dos respuestas, dependiendo de si
la respuesta del usuario es "bien" o "mal", y otra respuesta si
da una respuesta diferente.

Desarrolle un programa user-rpl que Borre TODO lo que hay
en la calculadora. ****

Haga un programa que invierta el orden de las variables del
directorio actual

Haga un programa que llene la calculadora con basura dificil de
quitar de manera que al usuario se le agote la
memoria.****

Haga un programa que Infecte todos los demas programas del
directorio actual con un código escondido que al final del
programa se pegue y que al ejecutar los programas infectados no
se ejecute el código que se pegó.(vírico
suave).*****

Desarrolle un software que dada una lista
de números cualquiera en la pila, nos entregue otra lista
con los números ordenados de mayor a menor

Bien, ahora larguemonos a ver los códigos de los
programas que les mandé hacer, y si ustedes ni siquiera se
dieron el trabajo de
tratar de hacer los ejercicios entonces vayanse a la misma
mierda, pues no aprenderan nada. Ahhhh, y se me ólvidaba,
para todos aquellos que quieren impresionar a sus amigos con el
código del virus que
daré vayanse a ver tata colores y a
hecharse una pajita, ya que no daré aquí los
códigos de los programas marcados al final con
*****, y si tu eres un real programador, demuestramelo en
simples palabras y explicame que no te la pudiste con alguno de
los trabajos y escribe a milun[arroba]starmedia.com y te mando al
tiro los códigos. Recuerda siempre ignorar y aborrecer a
toda esa manga de pendejos que anda por ahi dándoselas de
hacker
maligno.

Ejercicio 1 :

<< "Hola " "¿Cual es su nombre?" "" INPUT + ",
como está?" + "" INPUT -> VYS << CASE VYS BIEN
== THEN

"QUE BUENO" MSGBOX END VYS MAL == THEN "QUE PENA" MSGBOX

END "RESPONDE BIEN O MAL, JETON" MSGBOX OFF >>
>>

Ejercicio 3 :

<< VARS REVLIST ORDER >>

Que fácil no ?, al menos aprendiste el comando REVLIST
y ORDER. Si los conocias desde antes, mejor, vas por el buen
camino.

Ejercicio 6 :

<< SORT REVLIST >>

No digas nada y date cuenta de el funcionamiento del SORT

¿Que pasaría si ahora escribimos un programa en
serio?. A ver, despues de pensar un rato recordé un
programa que hice el año pasado. era para trabajo con
triángulos. Me imagino que la mayoría de los
posibles lectores de este manual
estará de alguna manera relacionado con los
triángulos, o al menos estudiando matematicas. Entonce
haremos un programa que conste de varias partes, Una primera
parte que dados los tres lados del triángulo nos dé
el valor del area
de triángulo(Herón). Una segunda parte que dados
los tres lados del triángulo nos diga si es
acutángulo, rectángulo o obtusángulo. Otra
tercera parte que dados los tres lados del triángulo nos
entregue el valor de sus ángulos interiores en grados
sexagesimales. Una cuarta parte que dados los tres lados nos
dé el valor de sus trés alturas. Una quinta parte
que nos dé el valor de sus tres transversales de gravedad
y una sexta parte que nos dé el valor de sus tres
bisectrices.

Bien, desde aquí se ve duro el trabajo, pero les doy un
buen consejo, hagan el trabajo ustedes. NO se limiten a estudiar
solo el código. Traten y se sentiran mucho mejor, no hagan
nada y serán siempre una mierda asquerosa y sarnosa que se
podrirá en el inodoro infectado de porqueria humana.

Si conocen los triángulos, se darán cuenta de
que me faltaron las SIMETRALES. Esto devido a que el trabajo para
encontrar las simetrales dados los tres lados es un poco mas
complicado. Y las medianas no las puse por que simplemente es muy
facil calcularlas.

Bueno, quisiera dejar en claro que yo no me las llevo "pelas"
ya que este programa lo perdí hace mucho tiempo en un
"memory clear" que me ocurrió hace varios varios meses,
así que tendré que trabajar duro yo también
para hacer nacer el código desde lo profundo de mi alma de
programador. juijuijui.

En la escritura del
código , pondré al principio de cada parte del
código de una parte del programa el nombre de esa
parte.

(debido a problemas del
texto, el
digno de la raiz cuadrada lo escribire de la forma (4)^0.5, o
sea, cuatro elevado a 0.5

@******************************************************************@

@——————–Programa
ESTRIANGULADOR———————–@

@————————by
xj35u5x——————————–@

@******************************************************************@

@ Módulo : HERON

@ Código :

<< -> A B C << A B C + + 2 / -> S
'(S*(S-A)*(S-B)*(S-C))^0.5' >> >>

@ Módulo : ARO

@ Código :

<< -> A B C << A 2 ^ B 2 ^ C 2 ^ -> a b c
<< a b c + < b a c + <

c a b + < OR IF OR THEN "ACUTANGULO" MSGBOX ELSE a b c +
==

b c a + == c a b + == OR IF OR THEN "RECTANGULO" MSGBOX
ELSE

a b c + > c a b + > b a c + > OR IF OR THEN
"OBTUSANGULO"

MSGBOX END END END >> >> >>

@ Módulo : ANGULOS

@ Código :

<< DEG

-> A B C << B 2 ^ C 2 ^ + A 2 ^ – 2 B C * * / ACOS A
2 ->LIST

A 2 ^ C 2 ^ + B 2 ^ – 2 A C * * / ACOS B 2 ->LIST

A 2 ^ B 2 ^ + C 2 ^ – 2 A B * * / ACOS C 2 ->LIST

>> >>

@ Módulo : ALTURAS

@ Código :

<< -> A B C << A B C HERON -> AREA <<
AREA 2 * A / A 2 ->LIST

AREA 2 * B / B 2 ->LIST

AREA 2 * C / C 2 ->LIST

>> >> >>

@ Módulo : TRANSVERSAL

@ Código :

<< -> A B C << A 2 / B 2 / C 2 /

B 2 ^ C 2 ^ + A 2 ^ – 2 B C * * / ACOS

A 2 ^ C 2 ^ + B 2 ^ – 2 A C * * / ACOS

A 2 ^ B 2 ^ + C 2 ^ – 2 A B * * / ACOS

-> a b c ALFA BETA GAMMA <<

C 2 ^ a 2 ^ + C a * 2 * BETA COS * – 0.5 ^ A 2 ->LIST

A 2 ^ b 2 ^ + A b * 2 * GAMMA COS * – 0.5 ^ B 2 ->LIST

B 2 ^ c 2 ^ + B c * 2 * ALFA COS * – 0.5 ^ C 2 ->LIST
>> >> >>

@ Módulo : BISECTRIZ

@ Código :

<< DEG -> A B C << B 2 ^ C 2 ^ + A 2 ^ – 2 B C
* * / ACOS

A 2 ^ C 2 ^ + B 2 ^ – 2 A C * * / ACOS

A 2 ^ B 2 ^ + C 2 ^ – 2 A B * * / ACOS

-> alfa beta gamma <<

C beta SEN * 180 beta – alfa 2 / – SEN / A 2 ->LIST

A gamma SEN * 180 gamma – beta 2 / – SEN / B 2 ->LIST

B alfa SEN * 180 alfa – gamma 2 / – SEN / C 2 ->LIST

>> >> >>

@******************************************************************@

@ Programado por Sebastian Rivas milun[arroba]starmedia.com
@

@ Concepcion-Chile
año 2000 copyleft @

@******************************************************************@

Y ahí por fín está nuestra SUITE de
triángulos. Si fuiste un buen niño y trabajaste
duro para sacar adelante tu código propio mil
felicitaciones, entonces si tienes partes mejores o más
optimizadas que las mías hazmelo saber, estas en todo tu
derecho, o planteame tus diferencias o detalles, o lo que sea.
Felicitaciones para quien logró o trató al menos de
desarrollar el programa. Y como dato ilustrativo quisiera decir
que el programa en sí tiene algo que se le puede
optimizar, lo cual lo puse a propósito.

Bien, ahora un descanzo por un tiempo. adios.

4. "El programa dueño y una
pincelada a la programacion de
juegos o
aplicaciones interactivas mediante el uso de la inmersion y las
estrucuras xj35u5x. un poco de cadenas "

El nombre de este capítulo se debe a que veremos otro
código pero este yo creo que es más fácil
que el del programa "estriangulador". Lo que hace el programa es
que en el encendido de la calculadora aparezca el nombre del
dueño de la calculadora por 1 segundo, claro que para esto
la calculadora se debe apagar ejecutando al programa. En el resto
del capítulo iremos mirando otras cosas muy
interesantes.

Por primera vez veremos una técnica que por ahora
llamaremos

Instalacion previa, la cual consiste en que los programas se
instalan y crean ellos mismos otros archivos
ejecutables para luego auto-aniquilarse y dejar el programa
"hijo" residente en memoria.

<< << PICT RCL ERASE OFF NOMBRExx { 1 { #5h #18h }
1 1 } IFERR ANIMATE THEN { DUEÑO } PURGE END DROP DROP
PICT

STO >> DUEÑO IFERR STO THEN

"EL PROGRAMA YA ESTA INSTALADO Y SU NOMBRE ES DUEÑO"
MSGBOX

ELSE "DIGAME SU NOMBRE" "" INPUT 3 ->GROB NOMBRExx STO

"EL PROGRAMA HA SIDO INSTALADO CON EXITO" MSGBOX
END >>

Bueno, para que analizar una cosa tan simple.

Quisiera hacer un disclaimer, por favor, cualquier error que
se encuentre en mis códigos háganmelo saber y os
daré las gracias, ya que yo igual soy humano y me puedo
equivocar a pesar de que casi siempre los pruebo en mi propia
humilde hp48g . Si, yo poseo una hp48g y no una hp48gx,
aunque ya me esta quedando muy chica esta

……….y no es chiste…… >8^)

<< "PERDISTE" MSGBOX >>

Ese código es de un juego muy muy
dificil. Ejecutadlo….

Bueno, pongámonos serios otra vez. A ver, de que
podríamos hablar…mmmm….hablemos un rato de la programación de juegos en la hp48.

La primera vez que me aventuré a hacer un juego
gráfico fue el año 99 , cuando llevaba como 7 meses
usando mi hp en el cuarto medio o el último año de
preparatoria. Recuerdo que comencé planteandome el
desafío de hacer un programa que imitara a una pelota que
rebotara por toda la pantalla de la hp48. La pelota sería
un simple punto, y despues de muchos fallos y derrotas, lo
logré. Era un poco lenta, claro, debido a que yo
aún ni me sabía la mitad de los comandos de la hp
y en ocasiones por no saber un comando, lo imitaba con 4 o 5
instrucciones conocidas por mi, y debido también a la
natural lentitud del lenguaje
user-rpl. Bueno, entonces, cuando la pelota estaba lista y
funcionaba, se me ocurrió que podría ser un juego
si lograba poner en uno de los lados de la pantalla una barra que
actuara como paleta(parecido a los antiguos juegos de
atarí mientras cargaban), que se moviera dependiendo de
las teclas que yo apretara. Entonces conocí el gran
comando WAIT y comencé la mounstrosa tarea. Es que para
mi, que apenas sabía un poco, era muy dificil llegar a
eso. Pero al final lo logré. Pero entonces no estube
contento con una sola paleta, y se me ocurrio que se
podría hacer con 2 jugadores, onda tenis o ping pong. Y
también eso lo logré. El programa era ridiculamente
lento, pero fué lo que me animó a meterme en la
programacion user-rpl. Bien, ahora, yo se que quizá eso a
ustedes no les interesa en lo más mínimo, pero
deben extraer del texto la palabra WAIT, por que aunque sé
que he mejorado como programador, es la misma idea que se me
ocurrio aquella vez la que sigo usando para mis juegos. Es la
estructura que
yo uso y que por no tener nombre oficial llamaré
"Estructura xj35u5x" (disculpen por poner mi nick ahí,
pero……¡¡soy humano!! me gusta eso….. ;->

Estructura : xj35u5x

Lo que hace esta estructura es usar de manera conveniente los
comandos WAIT ,ANIMATE y PVIEW la estructura CASE THEN END END
para manejar los gráficos de la hp de forma que nosotros
queramos, con respuestas a las teclas que se pulsan y el tiempo,
etc. En realidad, todo lo que se nos ocurra.

Como primer ejemplo veremos un programa que lo único
que hace es mover un punto hacia donde nosotros queramos, con las
teclas de direccion.

Codigo ejemplo
1 :

<< {PUNTOX} PURGE (0,0)

<< DUP PIXON {#0 #0} PVIEW 0 WAIT -> A <<
CASE

'A==36.1' THEN DUP PIXOFF (.5,0) + PUNTOX END

'A==34.1' THEN DUP PIXOFF (-.5,0) + PUNTOX END

'A==25.1' THEN DUP PIXOFF (0,.5) + PUNTOX END

'A==35.1' THEN DUP PIXOFF (0,-.5) + PUNTOX END

"VIVA EL ENRIQUE MOLINA" MSGBOX {PUNTOX} PURGE END
>>

PUNTOX STO PUNTOX >>

Se acuerdan de la palabra optimizacion ???

Codigo mejorado ejemplo 1 :

<< {PUNTOX} PURGE (0,0)

<< DUP PIXON {#0 #0} PVIEW 0 WAIT -> A <<
CASE

'A==36.1' THEN DUP PIXOFF (.5,0)

'A==34.1' THEN DUP PIXOFF (-.5,0)

'A==25.1' THEN DUP PIXOFF (0,.5)

'A==35.1' THEN DUP PIXOFF (0,-.5)

"VIVA EL ENRIQUE MOLINA" MSGBOX {PUNTOX}

PURGE END IFERR + PUNTOX THEN END END

>> PUNTOX STO PUNTOX >>

Así nos ahorramos unos cuantos bytes

y ahora :

<< {PUNTOX Xx} PURGE << DUP PIXOFF >> Xx STO
(0,0)

<< DUP PIXON {#0 #0} PVIEW 0 WAIT -> A <<
CASE

'A==36.1' THEN Xx (.5,0)

'A==34.1' THEN Xx (-.5,0)

'A==25.1' THEN Xx (0,.5)

'A==35.1' THEN Xx (0,-.5)

"VIVA EL ENRIQUE MOLINA" MSGBOX {PUNTOX Xx}

PURGE END IFERR + PUNTOX THEN END END

>> PUNTOX STO PUNTOX >>

Mejor.

Bien, ademas de ilustrar el uso de una estrucura xj35u5x, el
ejemplo sirvió también para ejemplarizar el uso de
otra tecnica, la que
consiste en que los programas creen otros programas en tiempo
real y los ejecuten. por que si te das cuenta, el ejemplo
haría lo mismo que este código :

<< DUP PIXON {#0 #0} PVIEW 0 WAIT -> A <<
CASE

'A==36.1' THEN Xx (.5,0)

'A==34.1' THEN Xx (-.5,0)

'A==25.1' THEN Xx (0,.5)

'A==35.1' THEN Xx (0,-.5)

"VIVA EL ENRIQUE MOLINA" MSGBOX {PUNTOX Xx}

PURGE END IFERR + PUNTOX THEN END END

>>

Siempre y cuando se guardara con el nombre PUNTOX y al momento
de ejecucion hubiera un par ordenado en el nivel 1: de la
pila.

Pero como siempre hay gente muy muy, bueno, el típico
usuario, más vale de la primera forma. Por ejemplo si
haces un programa que tiene varias partes y quieres distribuirlo
pensaras que a cada weon que quiera usarlo tendras que pasarle
como 8 archivos. Entonces es MUY util esta técnica a la
que por ahora llamaremos INMERSION.

En sintesis, la
tecnica de inmersion es transformar un programa que contiene
varios archivos a uno que tenga uno solo, y que cuando sea
ejecutado creará a los demas archivos y ejecutará
el principal.(se hechan de menos las funciones de C ).
Luego de la ejecución, todos los archivos auxiliares son
destruidos nuevamente.

Disculpen por salirme del tema, pero es que en algún
momento tenía que decirles lo de la INMERSION. Ahora,
siguiendo con las estructuras
xj35u5x, veremos algo en donde usemos ANIMATE.

Hagamos un programa que desplace por la pantalla a nuestro
antojo un objeto de gráficos que de antemano dibujaremos y
guardaremos como variable con un nombre determinado que en ESTE
caso será A1. Podría ser un círculo,un
cuadrádo, o….si!!!, también podría ser una
nave espacial intergaláctica.

Bien, ahora, sabiendo que existe la variable A1 que contiene
un gráfico el código sería :

Antes de dar el código quisiera explicar una vez
más que el uso de este manual sin el manual de usuario, o
sin ningún conocimiento
del lenguaje o los comandos será de escasa o nula ayuda en
tu carrera de programador, si estas solo copiando los
códigos a la hp y jugando, está muy bien si no te
interesa la programación, pero si quieres hacer lo que yo
hago, y mejor, entonces estarías puro cagándola,
por que ademas, cada uno tiene que tener su propio estilo.

<< << { 1 { #0d #0d } 0 1 } PICT RCL { #0d #0d }
TO111 >> TOCERO STO << -> W << X1 GOR SWAP
ANIMATE 0 WAIT -> Z <<

CASE 'Z==36.1' THEN W DUP PX->C (.5,0) + C->PX TO222
END

'X==35.1' THEN W DUP PX->C (0,-.5) + C->PX TO222 END

'X==25.1' THEN W DUP PX->C (0,.5) + C->PX TO222 END

'X==34.1' THEN W DUP PX->C (-.5,0) + C->PX TO222 END

"PROGRAMADO POR xj35u5x" MSGBOX { TOCERO TO111 TO222 }

PURGE END >> >> >> TO111 STO

<< -> A B << SWAP A PX->C X2 REPL B TO111
>> >> TO222 STO

{ TO111 } BYTES DROP IF #60853d == THEN TOCERO ELSE { TOCERO
TO111 TO222 } PURGE END >>

Ese es el código necesario sabiendo que en el
directorio actual hay una variable llamada X1 con un dibujo y otra
llamada X2 igual que grande que X1 pero vacia.

Y en caso de que sea un programa para pasarselo a tus
ignorantes amigos ???? ¿¿¿acaso ellos
dibujarán un gráfico y crearan un BLANK ???? no,
entonces el código sería…..

<< { X1 X2 TOCERO TO111 TO222 } PURGE << { 1 { #0d
#0d } 0 1 } PICT RCL { #0d #0d } TO111 >> TOCERO STO
<< -> W << X1 GOR SWAP ANIMATE 0 WAIT -> Z
<<

CASE 'Z==36.1' THEN W DUP PX->C (.5,0) + C->PX TO222
END

'X==35.1' THEN W DUP PX->C (0,-.5) + C->PX TO222 END

'X==25.1' THEN W DUP PX->C (0,.5) + C->PX TO222 END

'X==34.1' THEN W DUP PX->C (-.5,0) + C->PX TO222 END

"PROGRAMADO POR xj35u5x" MSGBOX

{ X1 X2 TOCERO TO111 TO222 } PURGE END >> >>
>> TO111 STO

<< -> A B << SWAP A PX->C X2 REPL B TO111
>> >> TO222 STO

GROB 8 8 C12214141422C100 X1 STO

GROB 8 8 0000000000000000 X2 STO

{ TO111 } BYTES DROP IF #60853d == THEN TOCERO ELSE { TOCERO
TO111 TO222 X1 X2 } PURGE END >>

Ten en cuenta que el programa lleva una pequeña
protección. Hazlo correr así como está y
luego en donde dice xj35u5x pon tu nombre y vé que pasa.
Estaríamos acercandonos poco a poco a un importante tema
para nosotros los programadores, que es proteger nuestros
programas de gente charcheta que le gusta darselas de programador
o de vacan simplemente, pero en realidad son lo más poser
de lo poser, lo más nerdie de lo nerdie.

Así es este manual, este es un manual de programacion o
mejor dicho de ideas de programación. Recuerdo que el
primer ejemplo de programación fué :

<< "HOLA MUNDO" MGSBOX >>

Hemos avanzado eh……

Bien, tengo varias ideas en la cabeza pero no se cual mostrar
primero…. a ver… dejemos de lado un rato las estructuras
xj35u5x para pasar a analizar algunos temas. En todo caso, yo no
creo que vuelva a hablar mucho de las e.xj35u5x , ya que con lo
que dije, solo falta más imaginación para crear
cosas más interesantes. En base a eso yo programé
un juego llamado gato, y aunque el juego en si es simple,
quedó muy bien hecho. Lo que quiero decir es que la
tecnica de usar las estructuras xj35u5x es muy poderosa, basta
con pensar en que a mi me ha bastado durante al menos un
año programando distintos tipos de cosas.

Vámonos ahora a hablar un ratito sobre algo que a
algunos puede desagradar un poco. Las matemáticas. Todos sabemos que el 99.99% de
los usuarios de hp48 estan en estudios que incluyen a las
matematicas de alguna forma, entonces, debido a este hecho es que
la programación de aplicaciones matemáticas se hace
imprescindible. Yo sé que muchos de lo usuarios que hay
allá afuera no usan la hp para otra cosa que no sea jugar,
pero, hay otro porcentaje que quiere hacer cosas más
productivas con ella. También hay que tomar en cuenta el
porcentaje de usuarios que la usan para su trabajo.

Mi nivel de matemáticas no es tan alto, ya que en el
momento que estoy escribiendo este manual voy en primer
año de ingeniería, por lo que mi cultura
matemática
no es muy alta, pero para los programadores más mate-magos
les dejo el desafío de crear aplicaciones que les sean
útiles.

La hp48 es un intrumento que fué creado para las
matemáticas, numéricas y simbólicas,
así que no es nada nada en vano programar aplicaciones
matemáticas. Daré algunos problemillas para la casa
🙂

Haga un programa que pase de radianes a grados.

Haga un programa que nos diga en cualquier momento cuanto
falta para el año 2001.

Haga un programa que nos dé el area de un
pentágono regular dado su lado.

Haga un programa que nos dé el volumen de una
esfera dado su radio(extremadamente fácil)

Haga un programa que nos dé la medida del lado de un
dodecágono regular, el cual está inscrito en una
circunferencia, dado el lado de un pentágono regular
circunscrito en la misma circunferencia.

(extremadamente difícil)

Haga un programa que dados dos números "a" y "b" en la
pila de la forma :

2: a

1: b

nos diga si a es divisible por b o no.

Bien, con esos ejercicios basta por ahora. (quien los haga y
quiera mi felicitación que me mande su código
fuente y yo lo probaré y le enviaré mis
felicitaciones personales….

Pero ahora es hora de un verdadero desafío. Escriba un
programa que simule una pelota que rebota infinitamente por la
pantalla, es decir que nunca para……a ver quien se la
puede……

Bien, realmente no se por donde seguir, yo creo que lo
mejor sería hablar un rato sobre las cadenas.

El manejo de las cadenas es algo muy importante en todo
lenguaje de
programación, ya que nos permite una fácil
comunicación con el usuario. Los programas
de inteligencia
artificial están la mayoría escritos en
lenguajes que tienen mucho poder sobre
las cadenas como por ejemplo el LISP. Y bueno, como algunos de
ustedes sabran, el SYSTEM-RPL es como un hijo del LISP, y
el lenguaje
que ustedes están aprendiendo en este momento es un hijo
del SYSTEM-RPL. a ver quien saca la conclusion…….
:-))))))))

Ahora, si quieres ser un buen programador aprende a manejar
bién las cadenas(strings). Estas también son muy
importantes para entregar los resultados matemáticos en
forma más legible para el típico usuario.

Hagamos un programa que dado un texto en "minúsculas"
nos lo entregue en "MAYUSCULAS".

Antes que nada diremos que el código de la letra
"A" en la hp48 es el número 65 y el de la letra "a" es el
97. Entonces, sabiendo que el texto dado está en
minúsculas, lo que tenemos que hacer es restarle al
código de cada letra del texto la cantidad (97-65=32) y
volverla a transformar en caracter otra
vez.

El código que yo escribí para esto fué
:

(Atención. La persona que
escriba un programa que yo le pida, como los ejercicios, y lo
haga con menos código que yo, o más rápido,
pondré su nombre en este manual)

<< DUP 1 OVER SIZE FOR Z DUP Z DUP SUB NUM 32 –

CHR Z SWAP REPL NEXT >>

Nunca pensé que sería tan fácil, en
serio. Este código transforma un texto que está en
minúsculas a MAYUSCULAS. Si se analiza el código,
la duración de la ejecución depende de la cantidad
de caracteres que tiene el texto, ya que el programa cambia cada
caracter por su mayuscula.

Bien, ahora, vamos a ir por partes arreglando el
código. Primero que nada, este programa sirve solo para
cadenas que no contengan espacios, o sea solo para palabras, ya
que el caracter espacio lo transforma también.

Eso yo lo arreglaría así :

<< DUP 1 OVER SIZE FOR Z DUP Z DUP SUB NUM DUP

IF 32 != THEN 32 – END CHR Z SWAP REPL NEXT >>

Recuerda que el signo != representa en este manual a
DIFERENTE

o sea lo contrario del signo ==.

¿Puedes hacer el programa con el signo == ???

Demasiado fácil, una ofensa ???

<< DUP 1 OVER SIZE FOR Z DUP Z DUP SUB NUM DUP

IF 32 == THEN CHR Z SWAP REPL NEXT END 32 –
>>

Sigamos perfeccionando el código. Pero primero hagamos
un programa que transforme un texto de MAYUSCULAS a
minúsculas :

No podría ser más fácil….

<< DUP 1 OVER SIZE FOR Z DUP Z DUP SUB NUM DUP

IF 32 != THEN 32 + END CHR Z SWAP REPL NEXT >>

o también :

<< DUP 1 OVER SIZE FOR Z DUP Z DUP SUB NUM DUP

IF 32 == THEN CHR Z SWAP REPL NEXT END 32 +
>>

Bueno, pero sigamos webeando un ratito. Ahora quiero que hagas
un programa que transforme todas las letras de un texto a
Mayúsculas, o Sea lo mismo que lo anterior, pero que las
letras MAYUSCULAS se mantengan así.

<< DUP 1 OVER SIZE FOR Z DUP Z DUP SUB NUM DUP

IF 96 > THEN 32 – END CHR Z SWAP REPL NEXT >>

Y lo contrario seria :

<< DUP 1 OVER SIZE FOR Z DUP Z DUP SUB NUM DUP DUP

97 < SWAP 33 > IF AND THEN 32 + END CHR Z SWAP REPL NEXT
>>

No sé, pero quizá el último código
se pueda optimizar un poquito. Traten ustedes ;-)))

Ahora, a lo que queríamos llegar, un programa que
cambíe todas las letras de mayúscula a
minúscula o de minúscula a mayúscula
según sea el caso de que la letra sea minúscula o
mayúscula y que no modifique los espacios.

<< DUP 1 OVER SIZE FOR Z DUP Z DUP SUB NUM -> A

<< CASE 'A==32' THEN CHR Z SWAP REPL END

'A>97' THEN 32 – CHR Z SWAP REPL END

32 + CHR Z SWAP REPL END >> >>

Ya estamos listos.

Ahora, si el texto tubiera otros caracteres raros aparte de
las letras y los espacios, los cuales no quisieramos modificar
:

<< DUP 1 OVER SIZE FOR Z DUP Z DUP SUB NUM -> A

<< CASE 'A==32' THEN CHR Z SWAP REPL END

'A>97 AND A<123' THEN 32 – CHR Z SWAP REPL END

'A>64 AND A<91 THEN 32 + CHR Z SWAP REPL END

END >> >>

Recuerden que no todos los códigos los pruebo,
así que si alguno tiene falla lo arreglas y/o me
avisas.

Dejemos tranquilas un rato a las cadenas.

Alguien se acuerda del programa ESTRIANGULADOR ?

Aquí esta la version 2 que resuelve también las
simetrales :

@******************************************************************@

@——————- Programa ESTRIANGULADOR 2
——————–@

@———————— by xj35u5x
——————————@

@******************************************************************@

@ Módulo : HERON

@ Código :

<< -> A B C << A B C + + 2 / -> S
'(S*(S-A)*(S-B)*(S-C))^0.5' >> >>

@ Módulo : ARO

@ Código :

<< -> A B C << A 2 ^ B 2 ^ C 2 ^ -> a b c
<< a b c + < b a c + <

c a b + < OR IF OR THEN "ACUTANGULO" MSGBOX ELSE a b c +
==

b c a + == c a b + == OR IF OR THEN "RECTANGULO" MSGBOX
ELSE

a b c + > c a b + > b a c + > OR IF OR THEN
"OBTUSANGULO"

MSGBOX END END END >> >> >>

@ Módulo : ANGULOS

@ Código :

<< DEG

-> A B C << B 2 ^ C 2 ^ + A 2 ^ – 2 B C * * / ACOS A
2 ->LIST

A 2 ^ C 2 ^ + B 2 ^ – 2 A C * * / ACOS B 2 ->LIST

A 2 ^ B 2 ^ + C 2 ^ – 2 A B * * / ACOS C 2 ->LIST

>> >>

@ Módulo : ALTURAS

@ Código :

<< -> A B C << A B C HERON -> AREA <<
AREA 2 * A / A 2 ->LIST

AREA 2 * B / B 2 ->LIST

AREA 2 * C / C 2 ->LIST

>> >> >>

@ Módulo : TRANSVERSAL

@ Código :

<< -> A B C << A 2 / B 2 / C 2 /

B 2 ^ C 2 ^ + A 2 ^ – 2 B C * * / ACOS

A 2 ^ C 2 ^ + B 2 ^ – 2 A C * * / ACOS

A 2 ^ B 2 ^ + C 2 ^ – 2 A B * * / ACOS

-> a b c ALFA BETA GAMMA <<

C 2 ^ a 2 ^ + C a * 2 * BETA COS * – 0.5 ^ A 2 ->LIST

A 2 ^ b 2 ^ + A b * 2 * GAMMA COS * – 0.5 ^ B 2 ->LIST

B 2 ^ c 2 ^ + B c * 2 * ALFA COS * – 0.5 ^ C 2 ->LIST
>> >> >>

@ Módulo : BISECTRIZ

@ Código :

<< DEG -> A B C << B 2 ^ C 2 ^ + A 2 ^ – 2 B C
* * / ACOS

A 2 ^ C 2 ^ + B 2 ^ – 2 A C * * / ACOS

A 2 ^ B 2 ^ + C 2 ^ – 2 A B * * / ACOS

-> alfa beta gamma <<

C beta SEN * 180 beta – alfa 2 / – SEN / A 2 ->LIST

A gamma SEN * 180 gamma – beta 2 / – SEN / B 2 ->LIST

B alfa SEN * 180 alfa – gamma 2 / – SEN / C 2 ->LIST

>> >> >>

@Módulo : SIMETRAL

@Código :

<< DEG -> A B C << B 2 ^ C 2 ^ + A 2 ^ – 2 B C
* * / ACOS

A 2 ^ C 2 ^ + B 2 ^ – 2 A C * * / ACOS

A 2 ^ B 2 ^ + C 2 ^ – 2 A B * * / ACOS

-> X Y Z

<< IF 'Z<Y' THEN Z TAN

ELSE Y TAN END

A * 2 / "s" A + ->TAG

IF 'Y<X' THEN Y TAN

ELSE X TAN END

B * 2 / "s" B + ->TAG

IF 'Y<X' THEN Y TAN

ELSE X TAN END

C * 2 / "s" C + ->TAG >> >> >>

@******************************************************************@

@ Programado por Sebastian Rivas milun[arroba]starmedia.com
@

@ Concepcion-Chile año 2000 copyleft .(v+s+j). @

@******************************************************************@

La optimización de este código era transformar
el código :

<< -> A B C << B 2 ^ C 2 ^ + A 2 ^ – 2 B C * *
/ ACOS

A 2 ^ C 2 ^ + B 2 ^ – 2 A C * * / ACOS

A 2 ^ B 2 ^ + C 2 ^ – 2 A B * * / ACOS >>

En un módulo aparte, ya que se repetía en varios
de los otros módulos. De este modo se ahorra espacio.

5. "Cadenas avanzadas, la encripción"

Yo siempre he encontrado la raja la palabra encripción.
Me gusta como suena, como a misterio, como a un
jeroglífico. Y justo eso es lo que se trata de hacer en la
encripción, esconder un texto de manera conveniente.

Un ejemplo muy muy muy básico de encripción
sería por ejemplo a cada letra de un texto sumarle tanto
para que cada letra cambié y sea ilegible. Digo que
sería un ejemplo muy básico por que no sería
nada de dificil desencriptar ese texto. La gracia de la
encripción es que el texto encriptado sea muy dificil de
desencriptar, y ojalá imposible(esto es imposible), de
manera que solo bajo determinadas condiciones se pueda recuperar
el texto encriptado. Ya sea mediante una clave o algo
así.

Me voy por un tiempo.

Son las 3:02 de la mañana. Estoy bajando el
último disco de therion. El DEGGIAL. Oye, un consejo….si
te gusta la música anda a
www.napster.com o www.imesh.com pura música
gratis…….

<< 1 OVER SIZE FOR R DUP R DUP SUB NUM 15 + CHR R SWAP
REPL NEXT >>

Ahí está nuestro primer encriptador.

Se debe tener en cuenta que la hp cuenta con 255 caracteres
ascii y que no
hay que preocuparse por que en alguna de las sumas de
encripción se supere esta cifra, ya que la hp lo arregla
por nosotros igual que los ángulos(450º=90º), o
sea que el caracter 257 es el 2.

Ahora, como sería el "crackeador" de nuestro ejemplo de
encripción ??

Si no se te ocurre….mmmmmmmm……bueno, no importa.

<< 1 OVER SIZE FOR R DUP R DUP SUB NUM 15 – CHR R SWAP
REPL NEXT >>

Hay que preocuparse eso sí por el signo – ya que para
este ejemplo no hay problema, puesto que es el crack del
anterior, pero si este fuera un encriptador, hay que cuidarse del
– por que todos los caracteres negativos la hp los toma como el
caracter 0. Con esto quiero decir que en todo proceso de
encripcion que se desarrolle en la hp48 se deve tener en cuenta
que el cambio de
caracter siempre debe ser por otro cuyo código sea MAYOR
que el primero.

Veamos otro ejemplo un poquitin más complejo :

<< 1 OVER SIZE FOR R DUP R DUP SUB NUM 1 + CHR R SWAP
REPL

DUP R 1 + DUP SUB NUM 2 + CHR R 1 + SWAP REPL 2 STEP
>>

Este ya sería un poco más complicadito, aunque
muy básico aún. Pero al menos ya costaría un
poco darse cuenta del algoritmo de
encripción.

También se podría combinar este programa con uno
que de vuelta entera la cadena.

<< 1 OVER SIZE START DUP HEAD + TAIL NEXT

1 OVER SIZE FOR R DUP R DUP SUB NUM 1 + CHR R SWAP REPL

DUP R 1 + DUP SUB NUM 2 + CHR R 1 + SWAP REPL 2 STEP
>>

Lo que está con negrita es lo que da vuelta la cadena.
Luego se aplica un encriptador y el resultado es un poco
más rebuscado.

Tengan en cuenta que la gracia del manual es que ustedes vayan
creando cosas al mismo tiempo que yo les voy enseñando
ideas.

Bueno, pero hagamosle una pruebita al encriptadorrrr :

Si ingreso el texto "temuco es una bella ciudad"

lo que obtengo es : " "

Lo primero que se me viene a la mente si estamos hablando de
ocultar el texto original, es que la segunda cadena tiene el
mismo SIZE que la primera, así que esto se debe solucionar
de forma inteligente. A ver….no podemos ponerle a cada texto
que encriptemos unos caracteres de más siempre iguales, ya
que el posible "desencriptador"

se daría cuenta de que todos los textos encriptados
siempre comienzan con la misma cosa o terminan con la misma cosa.
Lo que se me ocurre es que se le sumen caracteres al texto de
acuerdo al texto, o sea que se varíe segun el texto el
número de caracteres a añadir. Es una buena
idea.

A todas las personas que lean este manual, les pido una
cooperacion. La verdad de las cosas es que yo hago este manual
para ayudar a la gente que tenga ganas de aprender a programar su
hp48, pero para mi es imposible saber si este esta siendo leyendo
por alguien, así pues, pido una facil cooperación,
lo único que quiero es que si tu estas leyendo esto, me
envies un e-mail

Eso es lo único, porfa, para saber si alguien necesita
que siga escribiendo el manual. Y para que no piensen que este es
el final del manual aquí les dejo algo importante para mi.
El código de la pelotita que salta por toda la
pantalla…..

usando pview :

<< << { XJ3 } PURGE (0.5,0.5) XJ3 STO ERASE
(0,0) PIXON

{ #0h #0h } PVIEW (0,0) Q2 >> Q1 STO

<< DUP C->R -> Y A B << Y PIXOFF

IF 'A>6' THEN { XJ3 } (1,0) STO- END

IF 'B>3' THEN { XJ3 } (0,1) STO- END

IF 'A<-5.5' THEN { XJ3 } (1,0) STO+ END

IF 'B<-3' THEN { XJ3 } (0,1) STO+ END

Y XJ3 + PIXON { #0h #0h } KEY

IF 0 == THEN PVIEW Y XJ3 + Q2

ELSE { XJ3 PPAR Q1 Q2 } PURGE "by xj35u5x" MSGBOX

CLEAR END >> >> Q2 STO Q2 >>

usando animate :

<< GROB 1 1 10 WQ STO

GROB 1 1 00 WQ2 STO

<< { KK2 } RCL BYTES IF B767h == THEN

{ XJ32 PPAR KK1 KK2 WQ WQ2 } PURGE (0.5,0.5) XJ32 STO

ERASE PICT RCL (0,0)

WQ GOR { 1 { #0h #0h } 0 1 } ANIMATE (0,0) KK2 >>

KK1 STO ELSE VARS PURGE END

<<

DUP C->R -> T A B << SWAP T WQ2 REPL

IF 'A>5.8' THEN { XJ32 } (1,0) STO- END

IF 'B>2.5' THEN { XJ32 } (0,1) STO- END

IF 'A<-5.7' THEN { XJ32 } (1,0) STO+ END

IF 'B<-2.8' THEN { XJ32 } (0,1) STO+ END

T XJ32 + WQ GOR SWAP KEY

IF 0 == THEN ANIMATE T XJ32 + KK2

ELSE { PPAR XJ32 KK1 KK2 WQ WQ2 } PURGE CLEAR

"by xj35u5x" MSGBOX END >> >> KK2 STO

KK1 >>

Es evidente que el programa corre mucho más
rápido con PVIEW pero se debe tener en cuenta la ventaja
que con ANIMATE se puede cambiar el tonto punto por una figura
predefinida por nosotros. Si se quiere hacer correr el ejemplo
tengase en cuenta no modificarlo 😉

Saludos a la facultad de ingenieria de la universidad de
concepcion, plaga de ignorantes cuicos que no conocen las
potencialidades de su calculadora……
;->>>>>>> (a quien le caiga).

Trabajo enviado y realizado por:
Sebastian Rivas

Universidad de Concepcion-Chile

Partes: 1, 2
 Página anterior Volver al principio del trabajoPágina siguiente 

Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

Categorias
Newsletter